From: Sebastian Keller Date: Mon, 21 Mar 2022 19:45:36 +0000 (+0100) Subject: shell/window-preview-layout: Fix memory leaks X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~480^2^2~23 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=8c40b48a0951d18776daa08dee8b537d5029f338;p=gnome-shell.git shell/window-preview-layout: Fix memory leaks The WindowInfo allocated when adding a window was not getting free'd when the window was getting removed again or the layout was getting disposed. Also the hash table in which the WindowInfos are stored was not getting free'd on destruction either. Both could result in small leaks after closing the overview. Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5238 Part-of: --- diff --git a/src/shell-window-preview-layout.c b/src/shell-window-preview-layout.c index a759a74f1..062726409 100644 --- a/src/shell-window-preview-layout.c +++ b/src/shell-window-preview-layout.c @@ -292,6 +292,19 @@ shell_window_preview_layout_dispose (GObject *gobject) G_OBJECT_CLASS (shell_window_preview_layout_parent_class)->dispose (gobject); } +static void +shell_window_preview_layout_finalize (GObject *gobject) +{ + ShellWindowPreviewLayout *self = SHELL_WINDOW_PREVIEW_LAYOUT (gobject); + ShellWindowPreviewLayoutPrivate *priv; + + priv = shell_window_preview_layout_get_instance_private (self); + + g_hash_table_destroy (priv->windows); + + G_OBJECT_CLASS (shell_window_preview_layout_parent_class)->finalize (gobject); +} + static void shell_window_preview_layout_init (ShellWindowPreviewLayout *self) { @@ -299,7 +312,8 @@ shell_window_preview_layout_init (ShellWindowPreviewLayout *self) priv = shell_window_preview_layout_get_instance_private (self); - priv->windows = g_hash_table_new (NULL, NULL); + priv->windows = g_hash_table_new_full (NULL, NULL, NULL, + (GDestroyNotify) g_free); } static void @@ -314,6 +328,7 @@ shell_window_preview_layout_class_init (ShellWindowPreviewLayoutClass *klass) layout_class->set_container = shell_window_preview_layout_set_container; gobject_class->dispose = shell_window_preview_layout_dispose; + gobject_class->finalize = shell_window_preview_layout_finalize; gobject_class->get_property = shell_window_preview_layout_get_property; /**